local nl = require'luaNumeric'
require 'luaFDTD3D'
local plot = require "Q2DViewerEx"
require "Q3DViewer"

--===========================================================================--
--初始化参数
local EyeDiagram={
	widgets={};
	data={};
	scale = 20;
	set_settings_str = Gallop.set_settings_str;
	get_settings_str = Gallop.get_settings_str;
};
--===========================================================================--

--===========================================================================--
--创建表和创建元表
function EyeDiagram:new (o)
	o = o or {};
	self.__index = self;
	setmetatable(o,self)
	o:init();
	return o;
end
--===========================================================================--

--===========================================================================--
--初始化
function EyeDiagram:init ()

end
--===========================================================================--

--===========================================================================--
--获得数据
function EyeDiagram:read_from_file (path)
	self:select_tab_to_ui(0)
	local widget = Gallop.DataPost:create_data_table_to_ui();
	--print(path)
	widget:load_data( path )
	local data = nl.new_eigen_matrix()
	widget:get_data(data)
	self.t = data:col(1):to_std_vector()
	self.sig = data:col(2):to_std_vector()
	local view = self:get_tran_view();
	view:clearGraphs();
	view:addGraph(self.t,self.sig,'signal');
	view:rescaleAxes();
	Gallop.View.view = view;
	Gallop.View:init_2dplot('时间[ns]','端口电压[V/m]')
end
--===========================================================================--

--===========================================================================--
--眼图分析
function EyeDiagram:eye_diagram_analysis ()
	self:select_tab_to_ui(1)
	local view = self:get_eye_view();
	view:clearGraphs();
	local  ts = self:get_period();
	local np  = 50;
	np = math.floor( self.t[#self.t]/ts )
	for ii=1,np do 
		local xx = nl.new_vector();
		local yy = nl.new_vector();
		for jj=1,#self.t do 
			if self.t[jj] /ts > ii-1 and self.t[jj]/ts < ii then 
				xx:add(self.t[jj]-ts*(ii-1));
				yy:add(self.sig[jj]);
			end
		end
		view:addGraph(xx,yy)
	end
	view:rescaleAxes();
	Gallop.View.view = view;
	Gallop.View:init_2dplot('时间[ns]','端口电压[V/m]')
end
--===========================================================================--


return EyeDiagram;
